/*!  \file  Timer.h
 *	  \brief  Provides various methods to measure time between two events
 * 
 *   \details   details
 *   \author    Yordan Madzhunkov German Research School for Simulation Sciences GmbH
 *   \version   1.0
 *   \date      04/21/2013 12:24:08 PM
 *   \copyright GNU Public License.
 */
#pragma once

class Timer {
public:
	static Timer * instance();
	double getUserTime();   // CPU time spent executing instructions of the calling process - more accurate
	double getClockTime();  // CPU time spent executing instructions of the calling process - less accurate
	double getSysTime();    // CPU time spent in the system while executing tasks on behalf of the calling process

	double getRealTime();   // CPU time spent executing instructions of the calling process.
	double getMonoTime();   // Clock that cannot be set and represents monotonic time since some unspecified starting point.

	double getProcTime();   // High-resolution per-process timer from the CPU.
	double getThreadTime(); // Thread-specific CPU-time clock.
	Timer();
	time_t now() const; 
private:
	static Timer * myInstance;
	double rres;
};
